package main

import (
	"fmt"
	"io"
	"io/ioutil"
	"os"
)

var fileName = "file.txt"

func main() {
	byRead()
	byIoUtil()
	byOpen()
	byStat()
}

/**
read 字节方式，打开文件将内容读取一遍
总结：效率低，代码量大
*/
func byRead() {
	file, err := os.Open(fileName)
	if err == nil {
		sum := 0
		buf := make([]byte, 2014)
		for {
			n, err := file.Read(buf)
			sum += n
			if err == io.EOF {
				break
			}
		}
		fmt.Println("byRead file size is ", sum)
	}
}

/**
IoUtil 方法
总结：代码量小但是效率还是低
*/
func byIoUtil() {
	content, err := ioutil.ReadFile(fileName)
	if err == nil {
		fmt.Println("byIoUtil file size is ", len(content))
	}
}

/**
通过open方法获取
总结：速度会非常快，尤其对于大文件尤其有用，因为不会读取文件内容，不过会打开文件
*/
func byOpen() {
	file, err := os.Open(fileName)

	if err == nil {
		fi, _ := file.Stat()
		fmt.Println("byOpen file size is ", fi.Size())
	}
}

/**
通过stat方法获取
总结：速度会非常快，不会打开文件，只是读取文件元信息
*/
func byStat() {
	fi, err := os.Stat(fileName)
	if err == nil {
		fmt.Println("byStat file size is ", fi.Size(), err)
	}
}
